package com.bdzl.auth.service;

import com.bdzl.pub.common.Tree;
import com.bdzl.pub.entity.sys.MeauDO;
import com.bdzl.pub.vo.sys.MeauVO;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 系统菜单表
 *
 * @author yangyicai
 * @email yangyicai@foxmail.com
 * @date 2021-03-23 13:59:22
 */
public interface MeauService {

	MeauDO get(String menuId);

	List<MeauDO> list(Map<String, Object> map);

	List<MeauVO> voList(Map<String, Object> map);

	int count(Map<String, Object> map);

	int save(MeauDO meau);

	int update(MeauDO meau);

	int remove(String menuId);

	int batchRemove(String[] menuIds);
	/**
	 * @Description: TODO 根据用户id查询拥有权限
	 * @param id 用户id
	 * @return: java.util.List<java.lang.String>
	 * @Author: Ming
	 * @Date: 2021/4/27 18:44
	 */
	Set<String> listUserPerms(Integer id);
	/**
	* @Description: TODO 根据url获取权限代码
	* @param url 请求的url
	* @return: java.lang.String
	* @Author: Ming
	* @Date: 2021/5/7 14:33
	*/
	String getPermsByUrl(String url);
	/**
	 * 根据父级id查询
	 * @param pId 父级id
	 * @return 所有按钮
	 */
	List<MeauDO> getMenuByPid(List<String> pId);

	/**
	 * 添加菜单
	 * @param menu 菜单信息
	 * @return 1成功，0失败，-1重复，-2菜单ID不合法
	 */
	int add(MeauDO menu);

	/**
	 * 根据id查询是否有重复按钮id
	 * @param id id
	 * @return true false
	 */
	boolean verify(String id);

	/**
	 * 根据父级id删除下级
	 * @param pId 父级id
	 * @return
	 */
	int removeByPid(String pId);

	/**
	 * 根据角色信息加载pc权限菜单
	 * @param roleIds 当前登录者拥有的全部角色
	 * @param treeType 加载树的类型，admin：pc端，app 代表移动端
	 * @param selectRoleId 被选中的角色
	 * @param orgId 企业id
	 * @return Tree<MenuDO> 权限菜单树
	 */
	Map<String, Object> getTree(Integer[] roleIds, String treeType, String selectRoleId, Integer orgId);

	/**
	 * @param menus 构建树的权限菜单
	 * @param selectedMenuIds 选中的菜单ID
	 * @return Tree<MenuDO> 权限菜单树
	 */
	Tree<MeauDO> buidTreeAndSelected(List<MeauDO> menus,List<String> selectedMenuIds);
}
